'''
    data-type.py
    author: yizimi-yuanxin 
    update: 3.13
'''


class msg_segment(object):
    '''
    报文字段：
    报文字段代表的是报文中具有特定含义的一段字段
    比如：IP路段的dst addr字段
    seg_name: 字段名称
    seg_len: 字段长度（bit数）
    seg_data: 报文数据（二进制转为十进制），此处可能还是一个报文，递归分析
    '''
    seg_name = ""
    seg_len = 0
    seg_data = 0x000000
    def __init__(self, name: str, len: int, data: int):
        self.seg_name = name
        self.seg_len = len
        self.seg_data = data


class msg_struct(object):
    '''
    报文：
    一个完整的报文
    比如一个IP报文
    msg_len: 报文总长度
    msg_size: 报文的字段数量
    msg_type: 报文类型，此处主要指网络的哪一层，比如网络层
    msg_seg: 报文具体的字段，此处为列表，列表中元素为 msg_segment 类型
    '''
    msg_len = 0
    msg_size = 0
    msg_type = 0
    msg_seg = []
    def __init__(self, len: int, mtype: int):
        '''
        初始化，只需要报文总类型和报文类型，具体的报文解析在其他函数中
        '''
        self.msg_len = len
        self.msg_size = 0
        self.msg_type = mtype
        self.msg_seg.clear()
        
    def add_seg(self, seg: msg_segment):
        '''
        添加报文字段
        '''
        self.msg_seg.append(seg)
        self.msg_size += 1
        
    def Print(self):
        '''
        输出报文分析
        '''
        print("msg: ")
        print("len: %d, size of seg: %d" % (self.msg_len, self.msg_size))
        for seg in self.msg_seg:
            print("\tseg_name: %s, seg_len: %d, seg_data: %d" % (seg.seg_name, seg.seg_len, seg.seg_data))

